package me.alex.learnkotlin.learnKT1

import kotlin.math.max

/**
 * 学习基本类型和if/when/for逻辑判断
 */

fun main() {
    //1.1 打印
    println("Hello Kotlin!")

    //1.2 变量
    val a = 10 //val 不可变 对应java的final
    var b = 10 //var 可变 对应java的非final
    b = 20
    println("a = $a")
    println("b = $b")

    //1.3 变量类型推导
    val c: Int = 30 //推导c为Int类型

    /*
    Kotlin中的基本数据类型都是对象
    Int 整形
    Long 长整型
    Short 短整型
    Float 单精浮点
    Double 双精浮点
    Boolean 布尔值
    Char 字符
    Byte 字节

    String 与java中相同 都是对象
     */

    //1.4 函数
    //普通函数
    fun method1(num1: Int, num2: Int) {
        val result = num1 + num2
        println("result = $result")
    }

    //返回值函数 括号后加 : Type 指定返回值类型
    fun method2(num1: Int, num2: Int): Int {
        return max(num1, num2)
    }

    //Kotlin函数简化 当函数中只有一行时 等号表达返回值类型 可以去掉方括号
    fun method3(num1: Int, num2: Int) = max(num1, num2)

    method1(5, 10)
    println("sum = ${method2(10, 15)}")
    println("max = ${method3(35, 40)}")

    //1.5 if语句
    //普通简化
    fun largerNum1(num1: Int, num2: Int): Int {
        return if (num1 > num2) {
            num1
        } else {
            num2
        }
    }

    //单行简化
    fun largerNum2(num1: Int, num2: Int) = if (num1 > num2) num1 else num2

    //1.6 when语句
    //数据匹配
    fun getScore(name: String) = when (name) {
        "Tom" -> 86
        "Jim" -> 77
        "Jack" -> 95
        "Lily" -> 100
        else -> 0
    }

    //类型匹配
    fun checkNumber(number: Number) {
        when (number) {
            is Int -> println("num is Int")
            is Double -> println("num is Double")
            else -> println("num is support")
        }
    }

    //无when参数写法
    fun getScore2(name: String) = when {
        name.startsWith("Tom") -> 86
        name == "Jim" -> 77
        name == "Jack" -> 95
        name == "Lily" -> 100
        else -> 0
    }

    //1.7 循环语句
    //for循环
    //0..10 表示[0,10] 闭区间
    val range = 0..10
    println("左右闭区间")
    for (i in range) {
        println(i)
    }

    //until 表示左闭右开区间 step表示每次递增2 相当于for循环中 i+=2
    val range2 = 0 until 10
    println("左开右闭区间 自增")
    for (i in range2 step 2) {
        println(i)
    }

    println("左开右闭区间 自减")
    for (i in 10 downTo 1) {
        println(i)
    }


}

